#define _CRT_SECURE_NO_WARNINGS 1

#include "Date.h"

//int main()
//{
//	Date d1(2024, 1, 29);
//	Date d2 = d1 + 20;
//	d2.Print();
//	d1.Print();
//
//	d2 -= 20;
//	d2.Print();
//
//	d1 += 30000;
//	d1.Print();
//
//	++d1;
//	d1.operator++();
//	d1.Print();
//
//	d1++;
//	d1.operator++(10);
//	d1.Print();
//
//	/*bool ret = false;
//	if (ret)
//	{
//		d1.Print();
//	}*/
//
//	Date d4(2024, 1, 29);
//	Date d5(2024, 8, 1);
//	cout << (d5 - d4) << endl;
//
//	return 0;
//}

//int main()
//{
//	Date d1(2024, 1, 29);
//	Date d2 = d1 + 20;
//	d2.Print();
//	d1.Print();
//
//	void operator<<(ostream& out)
//	operator<<(cout, d1);
//	cout << d1;
//
//
//	cin >> d2 >> d1;
//	cout << d1 << d2;
//	
//	int i = 0;
//	printf("%d\n", i);
//	
//	d1 = d2 = d3;
//
//
//	//作为成员函数重载，this指针占据了第一个参数，Date必须是左操作数
//	d1.operator<<(cout);
//	d1 << cout;
//	
//	return 0;
//}

//int main()
//{
//	Date d1(2024, 2, 30);
//	Date d2 = d1 + 20;
//	
//	cin >> d1 >> d2;
//	cout << d1 << d2 << endl;
//
//	
//	return 0;
//}

//int main()
//{
//	//const Date d1(2024, 1, 31);
//	//d1.Print();
//
//	//Date d2(2024, 3, 31);
//	//d2.Print();
//
//	const int i = 0;
//	// 因为这里是拷贝，j的改变不影响i，也不存在所谓的权限方法
//	int j = i;
//
//	// 权限放大 -- 指针和引用才存在权限放大
//	// r的改变要影响i
//	int& r = i;
//
//	const int* p1 = &i;
//	int* p2 = p1;
//
//	printf("%d\n", i + 10);
//	return 0;
//}

class A
{
public:
	A* operator&()
	{
		return this;
		//return nullptr;
	}
	const A* operator&()const
	{
		//return (const A*)0x00eeffee;
		int a = 10;
		return (const A*)&a;
	}
};
int main()
{
	A aa1;
	const A aa2;
	// 日常都不需要我们写，编译器默认生成就够用了
	cout << &aa1 << endl;
	cout << &aa2 << endl;
	return 0;
}